Nos threads sont stockés et gérés par une structure dont voici la définition : 
\begin{center}
	\begin{verbatim}
		typedef struct {
		  ucontext_t context; // Le contexte du thread
		  int id; // L'id unique du thread
		  int isFinished; // Valeur indiquant la terminaison du thread
		  int isWaiting; // Valeur indiquant si le thread est attendu par un join
		  void * returnValue; // Valeur de retour du thread
		} ponyThread;
	\end{verbatim}
\end{center}

Plongeons plus en détails dans l'utilité de chaque attribut : 
\begin{itemize}
	\item \textbf{context} : Le contexte du thread, ce contexte sera créé dans la fonction \verb?thread_create()?, il sera sauvegardé à chaque fois que ce thread redonnera la main à un autre thread. 
	
	\item \textbf{id} : Un identifiant unique du thread, actuellement cet identifiant ne sert qu'à des fins de debug, il pourrait cependant s'avérer nécessaire pour implémenter un mécanisme de communication par signaux. 
	
	\item \textbf{isFinished} : variable booléenne indiquant si le thread est terminé ou non, cette valeur est à faux par défaut et sera mise à vrai lors de l'appel de \verb?thread_exit()? par le thread.
	
	\item \textbf{isWaiting} : variable booléenne indiquant si le thread est attendu par un join. Elle commence par défaut à faux et sera mise à vrai lors d'un appel à \verb?thread_join()? sur ce thread. Elle permet de vérifier que l'utilisateur ne fait pas plusieurs join sur le même thread. 
	
	\item \textbf{returnValue} : cette variable sert à stocker la valeur de retour du thread. Cette valeur sera donnée en paramètre de \verb?thread_exit()? et récupérée dans \verb?thread_join()?.
\end{itemize}




